package com.web.dao;

import com.web.pojo.domain.Device;
import com.web.pojo.domain.DeviceGroup;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Author: wws
 * describe:
 */

@Mapper
@Repository
public interface DeviceGroupDao {

    /**
     * 添加用户分组信息
     * @param deviceGroup 分组信息
     * @return 结果
     */
    public Integer insertDeviceGroup(DeviceGroup deviceGroup);

    /**
     * 修改设备分组信息
     * @param deviceGroup 分组信息
     * @return 结果
     */
    public Integer updateDeviceGroup(DeviceGroup deviceGroup);

    /**
     * 删除设备组
     * @param updateBy 删除者
     * @param deviceGroupIds 组ids
     * @return
     */
    public Integer deleteDeviceGroup(@Param("updateBy") String updateBy, @Param("deviceGroupIds") List<Integer> deviceGroupIds);

    /**
     * 查看设备组
     * @param str 查询条件
     * @param userId 用户id
     * @return 结果
     */
    public List<DeviceGroup> selectDeviceGroupList(@Param("str") String str, @Param("userId") Integer userId);

    /**
     * 添加用户与设备组的广联
     * @param userId 用户id
     * @param deviceGroupId 设备组id
     * @return 结果
     */
    Integer insertUserDeviceGroup(@Param("userId") Integer userId, @Param("deviceGroupId") Integer deviceGroupId);

    /**
     * 根据组Id查询设备组地址
     * @param deviceGroupIds 组id
     * @return 结果
     */
    public List<DeviceGroup> selectDeviceGroupAddrById(List<Integer> deviceGroupIds);

    /**
     * 添加设备与设备组的广联
     * @param deviceId 用户id
     * @param deviceGroupIds 设备组id
     * @return 结果
     */
    public Integer addDeviceToDeviceGroup(@Param("deviceId") Integer deviceId, @Param("deviceGroupIds") List<Integer> deviceGroupIds);

    /**
     * 删除设备与设备组的广联
     * @param deviceGroupIds 设备组
     * @return 结果
     */
    public Integer deleteDevicesInTheDeviceGroup(List<Integer> deviceGroupIds);

    /**
     * 添加设备与设备组的广联
     * @param deviceGroupId 设备组id
     * @param deviceIds 设备id
     * @return 结果
     */
    public Integer deviceGroupAddDevice(Integer deviceGroupId, List<Integer> deviceIds);

    /**
     * 根据Id查询组信息
     * @param deviceGroupId 组id
     * @return 结果
     */
    public DeviceGroup selectDeviceGroupById(Integer deviceGroupId);

    /**
     * 根据设备组id查询设备
     * @param groupId 设备id
     * @return 结果
     */
    public List<Device> selectDeviceListByGroupId(Integer groupId);

    /**
     * 查询设备可以分配的用户组
     * @param deviceId 设备
     * @return 结果
     */
    public List<DeviceGroup> selectAssignableDeviceGroup(@Param("deviceId") Integer deviceId, @Param("userId") Integer userId);

    /**
     * 查询不在组中的设备
     * @param userId 用户id
     * @param groupId 组id
     * @return 结果
     */
    public List<Device> selectDeviceNotInGroup(Integer userId, Integer groupId);
}
